package com.simple.manager;

import java.util.HashMap;
import java.util.Map;

/**
 * 增强对象管理类
 */
public class AgentManager {

    /**
     * 管理者对象的全局唯一对象
     */
    private static AgentManager agentManager = new AgentManager();

    /**
     * 管理容器
     */
    private Map<Class<?>, Object> map;

    /**
     * 构造方法
     */
    private AgentManager() {
        map = new HashMap<>();
    }

    /**
     * 调用此方法，获取管理对象的全局唯一对象
     *
     * @return 全局唯一对象
     */
    public static AgentManager getInstance() {
        if (agentManager == null) {
            agentManager = new AgentManager();
        }
        return agentManager;
    }

    /**
     * 调用此方法，注册被代理的对象
     *
     * @param aClass 被代理的对象的，类对象
     * @param object 被增强的对象
     */
    public void register(Class<?> aClass, Object object) {
        this.map.put(aClass, object);
    }

    /**
     * 调用此方法，注销被代理的对象
     *
     * @param aClass 被注销的对象的类对象
     */
    public void unregister(Class<?> aClass) {
        this.map.remove(aClass);
    }

    /**
     * 调用此方法，查看指定的增强对象
     *
     * @param aClass 增强对象的类对象
     * @return 增强对象
     */
    public Object lookup(Class<?> aClass) {
        return this.map.get(aClass);
    }

    /**
     * 调用此方法获取增强对象的管理容器
     *
     * @return 增强对象的管理容器
     */
    public Map<Class<?>, Object> lookup() {
        return this.map;
    }
}
